/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.Ufes.exeSwing.Presenter;

import edu.Ufes.exeSwing.Collection.PessoaJuridicaCollection;
import edu.Ufes.exeSwing.Model.PessoaJuridica;
import edu.Ufes.exeSwing.Persistence.PessoaJuridicaPersistence;
import edu.Ufes.exeSwing.View.InclusaoPessoaJuridicaView;
import edu.Ufes.exeSwing.View.ListaPessoasJuridicasView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author bhetynnacatalunha
 */
public class PessoaJuridicaPresenter {

    InclusaoPessoaJuridicaView inclusaoPessoaJuridicaView;
    PessoaJuridicaCollection pessoasJuridicas;
    ListaPessoasJuridicasView listaPessoasJuridicasView;
    DefaultTableModel tm;

    public PessoaJuridicaPresenter() {
        inclusaoPessoaJuridicaView = new InclusaoPessoaJuridicaView();
        pessoasJuridicas = new PessoaJuridicaCollection(new PessoaJuridicaPersistence());
        listaPessoasJuridicasView = new ListaPessoasJuridicasView();

        inclusaoPessoaJuridicaView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoPessoaJuridicaView.dispose();
            }
        });

        inclusaoPessoaJuridicaView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvar();
            }
        });

        listaPessoasJuridicasView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaPessoasJuridicasView.dispose();
            }
        });

        listaPessoasJuridicasView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoPessoaJuridicaView.getTxtCNPJ().setText("");
                inclusaoPessoaJuridicaView.getTxtNome().setText("");
                inclusaoPessoaJuridicaView.getTxtDataAbertura().setText("");
                inclusaoPessoaJuridicaView.getTxtEndereco().setText("");
                inclusaoPessoaJuridicaView.getTxtNomeUsuario().setText("");
                inclusaoPessoaJuridicaView.setVisible(true);
            }
        });

        listaPessoasJuridicasView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listaPessoasJuridicasView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });
        
        listaPessoasJuridicasView.getBtnPesquisar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });
        
        
        carregaPessoasJuridicas(pessoasJuridicas.getTodasPessoasJuridicas());
        
        listaPessoasJuridicasView.setVisible(true);

    }
    private void pesquisar() {
        tm.setNumRows(0);
        TreeSet<PessoaJuridica> pessoasfisicas = this.pessoasJuridicas.getTodasPessoasJuridicas();
        Iterator<PessoaJuridica> it = pessoasfisicas.iterator();
        while (it.hasNext()) {
            PessoaJuridica a = it.next();
            int fim = listaPessoasJuridicasView.getTxtFiltro().getText().length();

            String nome = a.getNome();
            String filtro = listaPessoasJuridicasView.getTxtFiltro().getText();

            if (nome.length() < fim) {
                fim = nome.length();
            }

            if (nome.substring(0, fim).toUpperCase().equals(filtro.toUpperCase())) {
                String linha = a.toString();
                String valores[] = linha.split("#");
                tm.addRow(valores);
            }


        }
    }

    private void carregaPessoasJuridicas(TreeSet pessoasFisicas) {
        tm = new DefaultTableModel(new Object[][]{}, new String[]{"Nome", "Nome do Usuario", "CNPJ", "Endereco", "Data de Abertura"}) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tm.setNumRows(0);
        Iterator<PessoaJuridica> it = pessoasFisicas.iterator();
        while (it.hasNext()) {
            PessoaJuridica d = it.next();
            String linha = d.toString();
            String valores[] = linha.split("#");
            tm.addRow(valores);
        }
        this.listaPessoasJuridicasView.getTblPessoasJuridicas().setModel(tm);
    }

    private void salvar() {
        PessoaJuridica pessoaJuridica = new PessoaJuridica(null, null, null, null, null);
        pessoaJuridica.setCNPJ(inclusaoPessoaJuridicaView.getTxtCNPJ().getText().toString());
        pessoaJuridica.setEndereco(inclusaoPessoaJuridicaView.getTxtEndereco().getText().toString());
        pessoaJuridica.setNome(inclusaoPessoaJuridicaView.getTxtNome().getText().toString());
        pessoaJuridica.setDataAbertura(inclusaoPessoaJuridicaView.getTxtDataAbertura().getText().toString());
        pessoaJuridica.setNomeUsuario(inclusaoPessoaJuridicaView.getTxtNomeUsuario().getText().toString());
      
        
        if (pessoaJuridica.getCNPJ().isEmpty() || pessoaJuridica.getNomeUsuario().isEmpty() || pessoaJuridica.getDataAbertura().isEmpty() || pessoaJuridica.getNome().isEmpty() || pessoaJuridica.getEndereco().isEmpty()) {
            JOptionPane.showMessageDialog(inclusaoPessoaJuridicaView, "Preencha os campos em Branco");
        } else {
            pessoasJuridicas.excluirpPessoaJuridica(pessoaJuridica);
            pessoasJuridicas.incluirPessoaJuridica(pessoaJuridica);
            this.carregaPessoasJuridicas(pessoasJuridicas.getTodasPessoasJuridicas());
            inclusaoPessoaJuridicaView.dispose();
            JOptionPane.showMessageDialog(listaPessoasJuridicasView, "Cliente Salvo com Sucesso");
        }
    }

    private void editar() {
        if (listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow() != -1) {
            String nome = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 0);
            String nomeUsuario = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 1);
            String cpf = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 2);
            String endereco = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 3);
            String dataAniversario = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 4);
            PessoaJuridica pessoaJuridica = new PessoaJuridica(nomeUsuario, endereco, cpf, dataAniversario, nome);
            inclusaoPessoaJuridicaView.getTxtCNPJ().setText(cpf);
            inclusaoPessoaJuridicaView.getTxtCNPJ().setEnabled(false);
            inclusaoPessoaJuridicaView.getTxtDataAbertura().setText(dataAniversario);
            inclusaoPessoaJuridicaView.getTxtEndereco().setText(endereco);
            inclusaoPessoaJuridicaView.getTxtNome().setText(nome);
            inclusaoPessoaJuridicaView.getTxtNomeUsuario().setText(nomeUsuario);
            inclusaoPessoaJuridicaView.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(inclusaoPessoaJuridicaView, "Selecione uma linha");
        }


    }

    private void excluir() {
        if (listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow() != -1) {
            if (JOptionPane.showConfirmDialog(listaPessoasJuridicasView, "Deseja mesmo excluir este Cliente?") == 0) {
                String nome = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 0);
                String nomeUsuario = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 1);
                String cpf = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 2);
                String endereco = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 3);
                String dataAniversario = (String) listaPessoasJuridicasView.getTblPessoasJuridicas().getValueAt(listaPessoasJuridicasView.getTblPessoasJuridicas().getSelectedRow(), 4);
                PessoaJuridica pessoaJuridica = new PessoaJuridica(nomeUsuario, endereco, cpf, dataAniversario, nome);
                pessoasJuridicas.excluirpPessoaJuridica(pessoaJuridica);
                this.carregaPessoasJuridicas(pessoasJuridicas.getTodasPessoasJuridicas());
                JOptionPane.showMessageDialog(listaPessoasJuridicasView, "Cliente excluido com Sucesso!");
            }
        } else {
            JOptionPane.showMessageDialog(listaPessoasJuridicasView, "Selecione uma linha");
        }
    }
}
